www.gusucode.com > LTE基带收发仿真系统matlab源码程序 > LTE baseband simulation/turbo_encoder.m

    function en_output = turbo_encoder(c)
%  turbo 编码函数,编码器参照 36.212 V8.6.0
%  码率为1/3,两个RSC编码器,附加输出12个尾比特
%  c为输入的信息比特,en_output为编码输出的信息
%  
%  Author:		程式小组(徐萌 张妙 张晓庆)
%  Date:		2010-06-20
%  ========================================================

% ======================== 独立测试函数时使用以下参数 =======
% clear
% clc
% input = randn(1,96)>0;
% 编码生成器
% =========================================================
g = [ 1 0 1 1;
    1 1 0 1 ];
Ki = length(c);	 % 信息比特数
alphaInternal = internal_leaver_par(Ki);


[n,K] = size(g); 
m = K - 1;
L_info = length(c); 
L_total = L_info + m;  
en_output = zeros(3,L_info+4); % turbo编码输出3流数据,每流后加4位终止比特

%得到第一个RSC的编码输出
output1 = rsc_encode(g,c,1);

% y的第一行为RSC1输出的系统比特
% 第二行为RSC1输出的校验比特
% 第三行为RSC2输出的校验比特

y(1,:) = output1(1:2:2*L_total); % 系统比特  xk
y(2,:) = output1(2:2:2*L_total); % 校验比特1 zk


% 对c交织,输入第二个rsc
input1 = c(alphaInternal);
%得到第二个RSC的编码输出
output2 = rsc_encode(g,input1, 1 );
y(3,:) = output2(2:2:2*L_total); % 校验比特2 zk'

% Turbo编码的尾比特处理 按如下特定顺序排列 依据TS 36.212 5.1.3.2.2
tailBits = transpose([output1(2*L_total-5:2:2*L_total);
            output1(2*L_total-4:2:2*L_total);
            output2(2*L_total-5:2:2*L_total);
            output2(2*L_total-4:2:2*L_total)]);
tailBits = tailBits([1 4 2 5 3 6 7 10 8 11 9 12]);
tailBits = reshape(tailBits,3,4);

en_output(:,1:end-4)=y(:,1:end-3);
en_output(:,end-3:end) = tailBits;
% 正负调制: +1/-1
% en_output = 2 * en_output - ones(size(en_output));